	void Load (string FileName)
		/* Modus Persiapan : Load */
		/* Mengeksekusi semua hal yang dilakukan dalam command Load sesuai dengan spek soal */
		/* Dalam satu tabel yang berada di node yang sama tidak dimungkinkan adanya dua record atau lebih
		   yang memiliki key yang sama */
		/* Jika key sama, maka seluruh isi record harus identik */
		/* Kesalahan jumlah argument tidak dimungkinkan */
		/* Kesalahan syntax @@<kode-lokasi-n> dan kesalahan syntax pada tabel tidak dimungkinkan */
		/* @end wajib ada */
		{
			/* KAMUS LOKAL */
				FILE *f;
				int JumlahLokasi;
				bool FatalErr = false;
		
			/* ALGORITMA */
				f = fopen(FileName.s, "r");
				ReadArguments(f);
				if (IsStringEqual(CReader.argument[0], CharToString("@nodes")))
					{
						///awal daftar lokasi / simpul
						if (! IsStringInt(CReader.argument[1]))
							{
								printf("LOAD ERROR : <jumlah-lokasi> bukan merupakan bilangan bulat\n");
								printf("FATAL ERROR : is aborted\n");
								FatalErr = true; //halt
							}
						else
							{
								JumlahLokasi = StringToInt(CReader.argument[1]);
								if (JumlahLokasi > 0)
									{LoadNodes(JumlahLokasi, f, FatalErr);}
								else
									{
										printf("LOAD ERROR : <jumlah-lokasi> tak positif\n");
										printf("FATAL ERROR : is aborted\n");
										FatalErr = true; //halt
									}
							}
					}
				else
					{
						printf("LOAD ERROR : @nodes tidak ditemukan\n");
						printf("FATAL ERROR : is aborted\n");
						FatalErr = true; //halt
					}
				if (! FatalErr)
					{
						//@edges
						
						
						
						
						
						//fclose(f);
						//Re-Load!!!
						
						
						
						
						
						printf("Loading file %s sukses.\n", FileName.s);
					}
				else
					{DestroyAll(); printf("Loading file %s gagal.\n", FileName.s);}
		}
	void LoadNodes(int JumlahLokasi, FILE *f, bool FatalErr)
		/* Load @nodes */
		/* Kesalahan syntax CPU Time tidak dimungkinkan, spek bonus */
		{
			/* KAMUS LOKAL */
				nodeAddress P, Q = FIRST(NODELIST);
				bool Existance = false, AllNil = false;
				string NamaNode;
				float WaktuRetrieve, WaktuUpdate, WaktuInsert, WaktuDelete;
				bool PunyaClient, PunyaServer, hasTMhs_baru = false, hasTMK_baru = false, hasTPMK_baru = false;
				int i;
		
			/* ALGORITMA */
				ReadArguments(f);
				for (i = 1; i <= JumlahLokasi; i++)
					{
						NamaNode = DeleteSubString(CReader.argument[0] , 0 , 2);
						if (IsStringEqual(CReader.argument[1], CharToString("Y")))
							{PunyaServer = true;}
						else /* T or else */
							{
								if (! IsStringEqual(CReader.argument[1], CharToString("T")))
									{
										printf("LOAD ERROR : status server != Y/T\n", i);
										printf("MINOR ERROR : has no server\n");
									}
								PunyaServer = false;
							}
						if (IsStringEqual(CReader.argument[2], CharToString("Y")))
							{PunyaClient = true;}
						else /* T or else */
							{
								if (! IsStringEqual(CReader.argument[1], CharToString("T")))
									{
										printf("LOAD ERROR : status client != Y/T\n", i);
										printf("MINOR ERROR : has no client\n");
									}
								PunyaClient = false;
							}
						//kesalahan syntax CPU Time tidak dimungkinkan, spek bonus
						WaktuRetrieve = StringToFloat(CReader.argument[3]);
						WaktuInsert = StringToFloat(CReader.argument[4]);
						WaktuUpdate = StringToFloat(CReader.argument[5]);
						WaktuDelete = StringToFloat(CReader.argument[6]);
						P = AllocateNode(NamaNode, WaktuRetrieve, WaktuUpdate, WaktuInsert,	WaktuDelete, 										 PunyaClient, PunyaServer);
						if (P == NULL)
							{AllNil = true;}
						if (! AllNil)
							{
								if (! ISLINKEDLISTEMPTY(NODELIST))
									{
										while (Q != NULL)
											{
												if (IsNodeEqual(P, Q))
													{Existance = true; break;}
												else
													{Q = NEXT(Q);}
											}
									}
								if (! Existance)
									{
										AddNode(&NODELIST, P);
										hasTMhs_baru = false; hasTMK_baru = false;
										hasTPMK_baru = false;
										ACTIVENODE = P;
										ReadArguments(f);
										if (CReader.nArgument == 1)
											{
												ChangeTableAvailability(ACTIVENODE, hasTMhs_baru, hasTMK_baru, 																		  hasTPMK_baru, f);
											}
										//else -> @@kode-lokasi-n+1
									}
								else
									{
										printf("LOAD ERROR : @@<kode-lokasi> sudah eksis\n");
										printf("MINOR ERROR : is skipped\n");
										DeallocateNode(P);
										do
											{ReadArguments(f);}
										while (! IsStringEqual(SubString(CReader.argument[0], 0, 1), 															   CharToString("@")));
										if (! IsStringEqual(SubString(CReader.argument[0], 0, 2), 															 CharToString("@@")))
											{
												if (IsStringEqual(CReader.argument[0], CharToString("@end")))
													{
														printf("LOAD ERROR : complicated ERROR\n");
														printf("FATAL ERROR : is aborted\n");
														FatalErr = true; //halt
													}
												else
													{
														//@edges
														
														
														
														
														
													}
											}
										//else {/*-> @@kode-lokasi-n+1*/}
									}
							}
						else
							{
								DestroyAll();
								printf("LOAD ERROR : not enough memory space\n");
								printf("FATAL ERROR : is aborted\n");
								FatalErr = true; //halt
							}
					}
		}